package es.gesfutbol.domini.implementacio;

import java.util.Date;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import es.gesfutbol.domini.IJugador;

@Entity
@Table(name="jugador")
public class Jugador implements IJugador {

	/**
	 * 
	 */
	private static final long serialVersionUID = -8713904019725143484L;

	private Long idJugador;
	
	private String nom;
	
	private boolean estaRetirat;
	
	private boolean estaSancionat;
	
	private Date naixement;
	
	private String llocNaixement;
	
	private Long alcada;
	
	private Long pes;
	
	private String posicio;
	
	private String rutaFoto;

	private Set<Incidencia> incidencies;
	
	private Set<JugadorEnEquip> jugadorEnEquip;
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="idJugador", nullable=false, precision=10, scale=0)
	public Long getIdJugador() {
		return idJugador;
	}

	public void setIdJugador(Long idJugador) {
		this.idJugador = idJugador;
	}

	@Column(name="nom", nullable=false, length=45)
	public String getNom() {
		return nom;
	}

	public void setNom(String nom) {
		this.nom = nom;
	}

	@Column(name="estaRetirat", nullable=true, columnDefinition="tinyint")
	public boolean isEstaRetirat() {
		return estaRetirat;
	}

	public void setEstaRetirat(boolean estaRetirat) {
		this.estaRetirat = estaRetirat;
	}

	@Column(name="estaSancionat", nullable=true, columnDefinition="tinyint")
	public boolean isEstaSancionat() {
		return estaSancionat;
	}

	public void setEstaSancionat(boolean estaSancionat) {
		this.estaSancionat = estaSancionat;
	}

	@Temporal(TemporalType.DATE)
	@Column(name="dataNaixement", nullable=false, length=11)
	public Date getNaixement() {
		return naixement;
	}

	public void setNaixement(Date naixement) {
		this.naixement = naixement;
	}

	@Column(name="llocNaixement", nullable=true, length=45)
	public String getLlocNaixement() {
		return llocNaixement;
	}

	public void setLlocNaixement(String llocNaixement) {
		this.llocNaixement = llocNaixement;
	}

	@Column(name="alcada", nullable=true, precision=8, scale=2)
	public Long getAlcada() {
		return alcada;
	}

	public void setAlcada(Long alcada) {
		this.alcada = alcada;
	}

	@Column(name="pes", nullable=true, precision=8, scale=2)	
	public Long getPes() {
		return pes;
	}

	public void setPes(Long pes) {
		this.pes = pes;
	}

	@Column(name="posicio", nullable=false, length=45)
	public String getPosicio() {
		return posicio;
	}

	public void setPosicio(String posicio) {
		this.posicio = posicio;
	}
	
	@Column(name = "rutaFoto", length = 45, nullable=false)
	public String getRutaFoto() {
		return rutaFoto;
	}

	public void setRutaFoto(String rutaFoto) {
		this.rutaFoto = rutaFoto;		
	}

	@ManyToMany(mappedBy="jugadors")
	public Set<Incidencia> getIncidencies() {
		return incidencies;
	}

	public void setIncidencies(Set<Incidencia> incidencies) {
		this.incidencies = incidencies;
	}

	@OneToMany(fetch=FetchType.LAZY, mappedBy="id.jugador", cascade=CascadeType.ALL)
	public Set<JugadorEnEquip> getJugadorEnEquip() {
		return jugadorEnEquip;
	}

	public void setJugadorEnEquip(Set<JugadorEnEquip> jugadorEnEquip) {
		this.jugadorEnEquip = jugadorEnEquip;
	}	
}